package com.xm.queue.task2;

import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;

/**
 * 优点：无锁设计，并发性能最优；适合极高并发场景。
 * 缺点：无阻塞支持，消费者需自行处理空队列（如轮询）。
 * 注意：
 *   size()方法遍历链表，复杂度为O(n)，避免频繁调用。
 *   isEmpty()比size() == 0更高效。
 *   迭代器可能无法反映实时状态。
 */
public class TaskConcurrentLinkedQueue extends BaseQueue {
    // 高吞吐场景可选
    private final Queue<ITask> taskQueue = new ConcurrentLinkedQueue<>();

    @Override
    public void put(ITask task) throws InterruptedException {
        this.taskQueue.add(task);
    }

    @Override
    public ITask take() throws InterruptedException {
        return this.taskQueue.poll();
    }

    @Override
    public ITask poll() throws InterruptedException {
        return this.taskQueue.poll();
    }

    @Override
    public int size() {
        return this.taskQueue.size();
    }
}
